iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 19
0
Mobile Development

Andriod Studio 菜鳥的學習分享系列 第 19

[Android Studio菜鳥的學習分享]通知訊息-Notification

  • 分享至 

  • xImage
  •  

我們將手機上方滑下來會有一片通知欄,
而裡面的通知就是Notification
這種通知可以不限定時間或開啟APP推撥通知,
且可以設定一些按鈕和按下後要做的事,
相當的方便~


目標:

1.EditText內輸入要通知的內容
2.按下廣播通知推撥通知
3.按下廣播的通知會跳轉至activity_main_b_test
4.按下清除所有廣播通知清除該APP所有的通知信息

結果預覽:

https://ithelp.ithome.com.tw/upload/images/20200918/20129524tcVKbtKFDa.jpg

https://ithelp.ithome.com.tw/upload/images/20200918/20129524tcBexSqeCn.jpg

按下廣播的通知會跳轉至activity_main_b_test
https://ithelp.ithome.com.tw/upload/images/20200918/20129524c7pzjarABf.jpg


activity_main.xml

https://ithelp.ithome.com.tw/upload/images/20200918/20129524lw7uEPwkII.jpg


NotificationHelper.java

https://ithelp.ithome.com.tw/upload/images/20200918/20129524fadpC9E20P.jpg

Step01-繼承Thread:

public class NotificationHelper extends ContextWrapper{

}

Step02-新增變數:

  1. channelID:
    自訂推撥的頻道ID
  2. channelName:
    自訂推撥的頻道名稱
  3. notificationManager:
    Android系統的通知管理器
  4. notificationBuildFinish:
    通知訊息的設定
public static final String channelID = "channelID";
public static final String channelName = "Channel Name";
private NotificationManager notificationManager;
private NotificationCompat.Builder notificationBuildFinish;

Step03-新增全域方法:

獲得呼叫此方法當下的Context,
並呼叫 Step04-創建頻道方法

public NotificationHelper(Context context) {
    super(context);
    createChannel();
}

Step04-新增創建頻道方法:

private void createChannel() {
    NotificationChannel channel = new NotificationChannel(channelID, channelName, NotificationManager.IMPORTANCE_HIGH);
    getManager().createNotificationChannel(channel);
}

Step05-新增Android系統的通知管理器方法:

NotificationManager 是Android系統的通知管理器,
我們要初始化NotificationManager,
讓APP獲得Notification服務。

public NotificationManager getManager() {
    if (notificationManager == null) {
        notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    }
    return notificationManager;
}

Step06-新增設計NotificationCompat.Builder(1):

public NotificationCompat.Builder notificationChannelBuild(String message){

}

Step07-新增設計NotificationCompat.Builder(2):

參數PendingIntent.XXXXX

  1. FLAG_CANCEL_CURRENT:
    如果系統中已經有一個相同的PendingIntent,
    則將舊的先取消再新生成一個新的。
  2. FLAG_IMMUTABLE:
    PendingIntent不可以改變。
  3. FLAG_NO_CREATE:
    如果系統中已經有一個相同的PendingIntent,
    則系統將部會創建這個PendingIntent。
  4. FLAG_ONE_SHOT:
    這個PendingIntent只能使用一次。
  5. FLAG_UPDATE_CURRENT:
    如果系統中已經有一個相同的PendingIntent,
    則系統會直接保留舊的PendingIntent,
    並將新的Intente更新舊的PendingIntent設定。
    例如:Intent的Extras
PendingIntent pendingIntent = PendingIntent.getActivity(this,0,new Intent(this,MainActivityBTest.class),PendingIntent.FLAG_CANCEL_CURRENT);

Step07-新增設計NotificationCompat.Builder(3):

設計你相想要的通知樣式與文字

return notificationBuildFinish = new NotificationCompat.Builder(getApplicationContext(),channelID)
        .setContentTitle("廣播測試")
        .setContentText(message)
        .setSmallIcon(R.drawable.ic_done)
        .setContentIntent(pendingIntent)
        .setAutoCancel(true);

MainActivity.java

https://ithelp.ithome.com.tw/upload/images/20200918/20129524TlYXz51T8H.jpg

廣播通知 按鈕

Step01-呼叫NotificationHelper:

NotificationHelper notificationHelper = new NotificationHelper(MainActivity.this);

Step02-呼叫NotificationCompat.Builder:

給予EditText輸入字串

NotificationCompat.Builder nb = notificationHelper.notificationChannelBuild(editTextInput.getText().toString());

Step03-將通知發送到狀態欄上:

notificationHelper.getManager().notify(1,nb.build());

清除所有廣播通知 按鈕

Step01-通過NotificationManager使用cancelAll()方法:

清除該APP所有的通知信息

NotificationManager manager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
manager.cancelAll();

上一篇
[Android Studio菜鳥的學習分享]檔案選擇器應用(下)-匯出CSV檔案
下一篇
[Android Studio菜鳥的學習分享]UI分享(一) - TabLayout & TabItem
系列文
Andriod Studio 菜鳥的學習分享30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言